/*
 * File:   mbdatacfg.h
 * Author: everyone
 *
 */

#ifndef _MB_INPUTDATA_CONFIG_H_
#define _MB_INPUTDATA_CONFIG_H_

#include "stdint.h"
#include "mbdef.h"
#include "mytype.h"

#ifdef _MBDATACB_MODULE_
#define EXTERN
#else
#define EXTERN extern
#endif

#define REG_INPUT_NREGS 0xFF00
#define REG_INPUT_START 0

/******************************************************************************
 * @brief   s输入区内存映射
 *****************************************************************************/
EXTERN word_tt mb_input[0x100];
EXTERN word_tt mb_disc[0x10];

#define mb_reg_index(x) ((uu16*)&(x) - &mb_input[0].uval)

/******************************************************************************
 * @brief   数据定义 - 设备信息
 *****************************************************************************/
#define mb_reg_dev_type mb_input[0].uval // 设备类型
#define mb_reg_dev_fun mb_input[1].uval	 // 设备功能

#define mb_bit_dev_fun_temp mb_input[1].bits.b0	 // 温度功能
#define mb_bit_dev_fun_humi mb_input[1].bits.b1	 // 湿度功能
#define mb_bit_dev_fun_speed mb_input[1].bits.b2 // 转速功能
#define mb_bit_dev_fun_light mb_input[1].bits.b3 // 光照功能
#define mb_bit_dev_fun_uv mb_input[1].bits.b4	 // 紫外功能
#define mb_bit_dev_fun_co2 mb_input[1].bits.b5	 // CO2功能
#define mb_bit_dev_fun_o2 mb_input[1].bits.b6	 // O2功能
#define mb_bit_dev_fun_o3 mb_input[1].bits.b7	 // O3功能
#define mb_bit_dev_fun_press mb_input[1].bits.b8 // 压力功能

#define mb_reg_hal_version mb_input[2].uval	 // 硬件版本
#define mb_reg_soft_version mb_input[3].uval // 软件版本

/******************************************************************************
 * @brief   数据定义 - 运行参数：设定值
 *****************************************************************************/
#define mb_reg_sv_time mb_input[4].ival	   // 运行参数设定值-时间
#define mb_reg_sv_temp mb_input[5].ival	   // 运行参数设定值-温度
#define mb_reg_sv_humi mb_input[6].ival	   // 运行参数设定值-湿度
#define mb_reg_sv_speed mb_input[7].ival   // 运行参数设定值-转速
#define mb_reg_sv_uv mb_input[8].ival	   // 运行参数设定值-紫外
#define mb_reg_sv_light mb_input[9].uval  // 运行参数设定值-光照
#define mb_reg_sv_light2 mb_input[10].uval // 光照2设定
#define mb_reg_sv_light3 mb_input[11].uval // 光照3设定
#define mb_reg_sv_light4 mb_input[12].uval // 光照3设定
#define mb_reg_sv_co2 mb_input[13].ival	   // 运行参数设定值-CO2
#define mb_reg_sv_o2 mb_input[14].ival	   // 运行参数设定值-O2
#define mb_reg_sv_o3 mb_input[15].ival	   // 运行参数设定值-O3

/******************************************************************************
 * @brief   数据定义 - 运行参数：测量值
 *****************************************************************************/
#define mb_reg_pv_time mb_input[17].ival   // 运行参数运行值-时间
#define mb_reg_pv_temp mb_input[18].ival   // 运行参数运行值-温度
#define mb_reg_pv_humi mb_input[19].ival   // 运行参数运行值-湿度
#define mb_reg_pv_speed mb_input[20].ival  // 运行参数运行值-转速
#define mb_reg_pv_uv mb_input[21].ival	   // 运行参数运行值-紫外
#define mb_reg_pv_light mb_input[22].uval  // 运行参数运行值-光照
#define mb_reg_pv_light2 mb_input[23].uval // 光照2测量
#define mb_reg_pv_light3 mb_input[24].uval // 光照3测量
#define mb_reg_pv_light4 mb_input[25].uval // 光照4测量
#define mb_reg_pv_co2 mb_input[26].ival	   // 运行参数运行值-CO2
#define mb_reg_pv_o3 mb_input[27].ival	   // 运行参数运行值-O3
#define mb_reg_pv_o2 mb_input[28].ival	   // 运行参数运行值-O2

/******************************************************************************
 * @brief   数据定义 - 运行状态
 *****************************************************************************/
#define mb_reg_run_st1 mb_input[30] // 运行状态
#define mb_reg_run_st2 mb_input[31]
#define mb_reg_run_st3 mb_input[32]
#define mb_reg_run_st4 mb_input[33]
#define mb_reg_run_st5 mb_input[34]

/******************************************************************************
 * @brief   数据定义 - 故障状态
 *****************************************************************************/
#define mb_reg_err_st1 mb_input[35] // 错误状态
#define mb_reg_err_st2 mb_input[36]
#define mb_reg_err_st3 mb_input[37]
#define mb_reg_err_st4 mb_input[38]
#define mb_reg_err_st5 mb_input[39]

#define mb_bit_err_global mb_reg_err_st1.bits.b0	  // 全局报警标志
#define mb_bit_err_beep_none mb_reg_err_st1.bits.b1 // 全局报警标志 且 关报警音
#define mb_bit_err_beep_keep mb_reg_err_st1.bits.b2 // 全局报警标志 且 开报警音

/******************************************************************************
 * @brief   数据定义 - 输出状态
 *****************************************************************************/
#define mb_reg_out_st1 mb_input[40] // 输出状态
#define mb_reg_out_st2 mb_input[41]
#define mb_reg_out_st3 mb_input[42]
#define mb_reg_out_st4 mb_input[43]
#define mb_reg_out_st5 mb_input[44]

/******************************************************************************
 * @brief   数据定义 - 输入状态
 *****************************************************************************/
#define mb_reg_in_st1 mb_input[45] // 输入状态
#define mb_reg_in_st2 mb_input[46]
#define mb_reg_in_st3 mb_input[47]
#define mb_reg_in_st4 mb_input[48]
#define mb_reg_in_st5 mb_input[49]

/******************************************************************************
 * @brief   数据定义 - 程序段
 *****************************************************************************/
#define mb_reg_prog_mode mb_input[50].ival	 // 程序模式
#define mb_reg_group mb_input[51].ival		 // 程序组
#define mb_reg_cycle_sv mb_input[52].ival	 // 设定循环次数
#define mb_reg_seg_sv mb_input[53].ival		 // 设定段数
#define mb_reg_cycle mb_input[54].ival		 // 当前循环次数
#define mb_reg_seg mb_input[55].ival		 // 当前段数
#define mb_reg_fan mb_input[56].ival		 // 风速

#define mb_reg_run_time_minute_lw mb_input[60].uval		 // 运行时间-分钟低字
#define mb_reg_run_time_minute_hw mb_input[61].uval		 // 运行时间-分钟稿字
/******************************************************************************
 * @brief   测量基准
 *****************************************************************************/
#define mb_reg_org_temp mb_input[64].ival  // 温度
#define mb_reg_org_humi mb_input[65].ival  // 湿度
#define mb_reg_org_speed mb_input[66].ival // 转速
#define mb_reg_org_light mb_input[67].ival // 光照
#define mb_reg_org_uv mb_input[68].ival	   // 紫外
#define mb_reg_org_co2 mb_input[69].ival   // CO2
#define mb_reg_org_o2 mb_input[70].ival	   // O2
#define mb_reg_org_o3 mb_input[71].ival	   // O3

/******************************************************************************
 * @brief   数据定义 - 标定及AD， 占用16通道
 * 访问方式：
 * mb_reg_mark_zero[ch]
 * mb_reg_mark_full[ch]
 * mb_reg_adc[ch]
 *****************************************************************************/
#define mb_reg_mark_zero(ch) (&mb_input[80].uval)[ch * 2]
#define mb_reg_mark_full(ch) (&mb_input[81].uval)[ch * 2]
#define mb_reg_adc(ch) (&mb_input[112].uval)[ch]

/******************************************************************************
 * @brief   数据定义 - 128(0x80)开始为共享区
 *****************************************************************************/

/******************************************************************************
 * @brief   数据定义 - 结束
 *****************************************************************************/
#undef EXTERN
#endif
